/* Determines air mileage from New York to other cities */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct city_info
{
    char *city;
    int miles;
};

int compare_cities(const void *key_ptr, const void *element_ptr);

int main(int argc, char **argv)
{
    char city_name[81];
    struct city_info *ptr;
    const struct city_info mileage[] =
    {
        {"Berlin", 3965}, {"Buenos Aires", 5297},
        {"Cairo", 5602}, {"Calcutta", 7918},
        {"Cape Town", 7764}, {"Caracas", 2132},
        {"Chicago", 713}, {"Hong Kong", 8054},
        {"Honolulu", 4964}, {"Istanbul", 4975},
        {"Lisbon", 3364}, {"London", 3458},
        {"Los Angeles", 2451}, {"Manila", 8498},
        {"Mexico City", 2094}, {"Montreal", 320},
        {"Moscow", 4665}, {"Parise", 3624},
        {"Rio de Janeiro", 4817}, {"Rome", 4281},
        {"San Francisco", 2571}, {"Shanghai", 7371},
        {"Stockholm", 3924}, {"Sydney", 9933},
        {"Tokyo", 6740}, {"Warsaw", 4344},
        {"Washington", 205}
    };

    printf ("Enter city name: ");
    scanf ("%80[^\n]", city_name);
    ptr = bsearch (city_name, mileage, sizeof(mileage) / sizeof(mileage[0]), sizeof(mileage[0]), compare_cities);
    if (ptr != NULL)
    {
        printf ("%s is %d miles from New York City.\n", city_name, ptr->miles);
    }
    else
    {
        printf ("%s wasn't found.\n", city_name);
    }

    return 0;
}
int compare_cities (const void *key_ptr, const void *element_ptr)
{
    return strcmp ( (char *) key_ptr, ( (struct city_info *) element_ptr)->city );
}
